package 数组的操作;

import java.util.*;
//问题描述
//        　　给出两个整数集合A、B，求出他们的交集、并集以及B在A中的余集。
//        输入格式
//        　　第一行为一个整数n，表示集合A中的元素个数。
//        　　第二行有n个互不相同的用空格隔开的整数，表示集合A中的元素。
//        　　第三行为一个整数m，表示集合B中的元素个数。
//        　　第四行有m个互不相同的用空格隔开的整数，表示集合B中的元素。
//        　　集合中的所有元素均为int范围内的整数，n、m<=1000。
//        输出格式
//        　　第一行按从小到大的顺序输出A、B交集中的所有元素。
//        　　第二行按从小到大的顺序输出A、B并集中的所有元素。
//        　　第三行按从小到大的顺序输出B在A中的余集中的所有元素。
//        样例输入
//        5
//        1 2 3 4 5
//        5
//        2 4 6 8 10
//        样例输出
//        2 4
//        1 2 3 4 5 6 8 10
//        1 3 5
public class 集合运算 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // a数组的输入
        int an = scanner.nextInt();
        int[] a = new int[an];
        for (int i = 0; i < an; i++) {
            a[i] = scanner.nextInt();
        }
        // b数组的输入
        int bn = scanner.nextInt();
        int[] b = new int[bn];
        for (int i = 0; i < bn; i++) {
            b[i] = scanner.nextInt();
        }
        // c数组的定义
        int[] c = new int[a.length+b.length];
        // 检测交集
        int index = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                if (a[i]==b[j]){
                    c[index] = a[i];
                    index ++;
                    break;
                }
            }
        }
        // 新建数组c1去除不必要的0
        int []c1 = new int[index];
        for (int i = 0; i < index; i++) {
            c1[i] = c[i];
        }
        Arrays.sort(c1); // 从小到大排序
        // 输出
        for (int i = 0; i < index; i++) {
            System.out.print(c1[i]+" ");
        }
        System.out.println();

        // 检测并集
        // 合并a和b赋值给d
        int[] d = new int[a.length+b.length];
        for (int i = 0; i < a.length; i++) {
            d[i] = a[i];
        }
        for (int i = a.length,i2 =0; i < a.length+b.length; i++,i2++) {
            d[i] = b[i2];
        }
        // 用Set的特性：不会增加相同的元素
        Set d2 = new HashSet();
        for (int i = 0; i < d.length; i++) {
            d2.add(d[i]);
        }
        Object[] d3 = d2.toArray();
        Arrays.sort(d3);
        for (int i = 0; i < d3.length; i++) {
            System.out.print(d3[i]+" ");
        }
        System.out.println();
        // 求a-b
        Set  e =new HashSet();
        for (int i = 0; i < a.length; i++) {
            e.add(a[i]);
        }
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                if (a[i]==b[j]){
                    e.remove(a[i]);
                }
            }
        }

        Object[] e1 = e.toArray();
        Arrays.sort(e1);
        for (int i = 0; i < e1.length; i++) {
            System.out.print(e1[i]+" ");
        }
    }
}
